{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "24708a5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch#导入torch包\n",
    "import torch.nn as nn#导入torch.nn库 用来构建神经网络模型\n",
    "import pandas as pd #导入pandas库\n",
    "import matplotlib.pyplot as plt #导入matplotlib库 用于可视化数据\n",
    "import random#导入随机数库\n",
    "import numpy#导入numpy库 用来处理数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "c9c48963",
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建一个生成真数据集的函数\n",
    "def generate_real():  \n",
    "    real_data = torch.FloatTensor(    #将生成的随机数数组[]类型转换为tensor（张量）\n",
    "        [random.uniform(0.8,1.0), #返回0.8,1.0之间的随机浮点数\n",
    "         random.uniform(0.0,0.2), #返回0.0,0.2之间的随机浮点数\n",
    "         random.uniform(0.8,1.0), #返回0.8,1.0之间的随机浮点数\n",
    "         random.uniform(0.0,0.2),])#返回0.0,0.2之间的随机浮点数\n",
    "    return real_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "ca914de8",
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建一个生成随机数的函数\n",
    "def generate_random():\n",
    "    random_data = torch.rand(4) #返回一个张量，包含了从[0,1)的均匀分布中冲去的一组随机数，张量的形状为4\n",
    "    return random_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "9be8e55e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.9730, 0.0761, 0.8098, 0.0698])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "generate_real()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "ce6eddb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.9216, 0.4970, 0.4419, 0.1597])"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "generate_random()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "ef780eaf",
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建鉴别器\n",
    "class Discriminator(nn.Module):\n",
    "    #初始化函数\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        #构建神经网络模型\n",
    "        self.model = nn.Sequential(     #构建一个时序容器（将神经网络模块将按照在传入构造器的顺序依次被添加到计算途中执行）\n",
    "            nn.Linear(4,3),             #对输入的数据做线性变换y = Ax + b  每个输入样本大小为4，每个输出样本大小为3\n",
    "            nn.Sigmoid(),               #返回一个新张量，包含输入的张量中每个元素的sigmoid值\n",
    "            nn.Linear(3,1),             #线性变换，输入样本大小为3，输出样本大小为1\n",
    "            nn.Sigmoid()                   \n",
    "        )\n",
    "        #self.model = self.model.cuda()\n",
    "        self.loss_function = nn.MSELoss()#创建一个损失函数为MSELoss（衡量输入x（模型预测输出）和目标y之间的均方误差标准）\n",
    "        self.optimiser = torch.optim.SGD(self.parameters(), lr=0.01)#随机梯度下降算法 学习率lr为0.01\n",
    "        self.counter = 0  \n",
    "        self.progress = []\n",
    "        pass\n",
    "    def forward(self, inputs):      #向前传播 调用前面构建的self.model(顺序执行容器中的操作)\n",
    "        return self.model(inputs)\n",
    "    def train(self, inputs, targets):#训练函数 \n",
    "        outputs = self.forward(inputs)#输出值\n",
    "        loss = self.loss_function(outputs, targets)#衡量神经网络模型的输出和目标之间的计算均方误差标准\n",
    "        self.optimiser.zero_grad() #将module中的所有模型参数的梯度设置为0\n",
    "        loss.backward()#反向传播\n",
    "        self.optimiser.step()#进行单次优化（参数更新）\n",
    "        self.counter +=1\n",
    "        if (self.counter % 10 == 0):#每10次\n",
    "            self.progress.append(loss.item())#将均方误差保存在progress中\n",
    "            pass\n",
    "        if (self.counter % 10000 == 0):#counter每10000次 打印一下loss值\n",
    "            print(\"counter = \",self.counter, \"loss = \",loss.item())\n",
    "            pass\n",
    "    def plot_progress(self): #可视化展示loss值\n",
    "        df = pd.DataFrame(self.progress, columns = ['loss'])\n",
    "        df.plot(ylim=(0, 1.0), figsize=(16,8), alpha=0.1, marker='.', grid=True, yticks=(0,0.25,0.5))\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "ef275f7d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "counter =  10000 loss =  0.20670370757579803\n",
      "counter =  20000 loss =  0.033594295382499695\n"
     ]
    }
   ],
   "source": [
    "D = Discriminator()#创建一个鉴别器对象\n",
    "for i in range(10000):\n",
    "    #[1 0 1 0 ...]结构的数据\n",
    "    D.train(generate_real().reshape(1,4), torch.FloatTensor([1.0]).reshape(1,1))#进行模型训练\n",
    "    D.train(generate_random().reshape(1,4), torch.FloatTensor([0.0]).reshape(1,1))\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "86bae365",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AAAAAMALBFQAAAAAgBcIqAAAAAAALxBQAQAAAABeIKACAAAAALxAQAUAAAAAeIGACgAAAADwAgEVAAAAAOAFAioAAAAAwAsEVAAAAACAFwioAAAAAAAvEFABAAAAAF4goAIAAAAAvEBABQAAAAB4gYAKAAAAAPACARUAAAAA4AUCKgAAAADACwRUAAAAAIAXCKgAAAAAAC8QUAEAAAAAXiCgAgAAAAC8QEAFAAAAAHiBgAoAAAAA8AIBFQAAAADgBQIqAAAAAMALBFQAAAAAgBcIqAAAAAAALxBQAQAAAABeIKACAAAAALxAQAUAAAAAeIGACgAAAADwAgEVAAAAAOAFAioAAAAAwAsEVAAAAACAFwioAAAAAAAvEFABAAAAAF4goAIAAAAAvEBABQAAAAB4gYAKAAAAAPACARUAAAAA4AUCKgAAAADACwRUAAAAAIAXCKgAAAAAAC8QUAEAAAAAXiCgAgAAAAC8QEAFAAAAAHiBgAoAAAAA8AIBFQAAAADgBQIqAAAAAMALBFQAAAAAgBcIqAAAAAAALxBQAQAAAABeIKACAAAAALxAQAUAAAAAeIGACgAAAADwAgEVAAAAAOAFAioAAAAAwAsEVAAAAACAFwioAAAAAAAvEFABAAAAAF4goAIAAAAAvEBABQAAAAB4gYAKAAAAAPACARUAAAAA4AUCKgAAAADACwRUAAAAAIAXCKgAAAAAAC8QUAEAAAAAXiCgAgAAAAC8QEAFAAAAAHiBgAoAAAAA8AIBFQAAAADgBQIqAAAAAMALBFQAAAAAgBcIqAAAAAAALxBQAQAAAABeIKACAAAAALxAQAUAAAAAeIGACgAAAADwAgEVAAAAAOAFAioAAAAAwAsEVAAAAACAFwioAAAAAAAvEFABAAAAAF4goAIAAAAAvEBABQAAAAB4gYAKAAAAAPACARUAAAAA4AUCKgAAAADACwRUAAAAAIAXCKgAAAAAAC8QUAEAAAAAXiCgAgAAAAC8QEAFAAAAAHiBgAoAAAAA8AIBFQAAAADgBQIqAAAAAMALBFQAAAAAgBcIqAAAAAAALxBQAQAAAABeIKACAAAAALxAQAUAAAAAeIGACgAAAADwAgEVAAAAAOAFAioAAAAAwAsEVAAAAACAFwioAAAAAAAvEFABAAAAAF4goAIAAAAAvEBABQAAAAB4gYAKAAAAAPAC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",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "D.plot_progress()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "9c788536",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7202072739601135"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.forward(generate_real()).item()#使用真实值输入模型进行鉴别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "0064166f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.18711349368095398"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.forward(generate_random()).item()#使用随机值输入模型进行行鉴别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "011aa776",
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建生成器\n",
    "class Generator(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        #构建神经网络模型\n",
    "        self.model = nn.Sequential( #一个时序容器\n",
    "            nn.Linear(1,3), #对输入的数据做线性变换y = Ax + b  每个输入样本大小为1，每个输出样本大小为3\n",
    "            nn.Sigmoid(),   #返回一个新张量，包含输入的张量中每个元素的sigmoid值   \n",
    "            nn.Linear(3,4), #输入样本大小为3，输出样本大小为4\n",
    "            nn.Sigmoid()\n",
    "        )\n",
    "        #self.model = self.model.cuda()\n",
    "        self.optimiser = torch.optim.SGD(self.parameters(), lr=0.01)#随机梯度下降法 学习率为0.01\n",
    "        self.counter = 0\n",
    "        self.progress = []\n",
    "        pass\n",
    "    def forward(self, inputs):\n",
    "        return self.model(inputs)\n",
    "    def train(self, D, inputs, targets):  #targets为目标数据\n",
    "        g_outputs = self.forward(inputs)  #生成器生成的数据\n",
    "        d_outputs = D.forward(g_outputs)  #将生成的数据使用鉴别器进行鉴别\n",
    "        loss = D.loss_function(d_outputs, targets)  #计算鉴别器的输出和目标数据的均方误差\n",
    "        self.optimiser.zero_grad()\n",
    "        loss.backward()\n",
    "        self.optimiser.step()\n",
    "        self.counter +=1\n",
    "        if (self.counter % 10 == 0):\n",
    "            self.progress.append(loss.item())\n",
    "            pass\n",
    "        if (self.counter % 10000 == 0):\n",
    "            print(\"counter = \",self.counter, \"loss = \",loss.item())\n",
    "            pass\n",
    "    def plot_progress(self):\n",
    "        df = pd.DataFrame(self.progress, columns = ['loss'])\n",
    "        df.plot(ylim=(0, 1.0), figsize=(16,8), alpha=0.1, marker='.', grid=True, yticks=(0,0.25,0.5))\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "a65d1d09",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.6065, 0.6373, 0.3855, 0.3743], grad_fn=<SigmoidBackward0>)"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G = Generator() #定义一个生成器对象\n",
    "G.forward(torch.FloatTensor([0.5])) #根据中立数0.5生成数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "a23d57b4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "counter =  10000 loss =  0.22730591893196106\n",
      "counter =  20000 loss =  0.2546802759170532\n",
      "counter =  10000 loss =  0.2464923858642578\n",
      "Wall time: 13 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "#训练GAN\n",
    "D = Discriminator()\n",
    "G = Generator()\n",
    "image_list = []\n",
    "for i in range(10000):\n",
    "    D.train(generate_real(), torch.FloatTensor([1.0]))#根据目标数据1和真实数据训练鉴别器 （目标数据1代表真，即当前训练的输入鉴别器的数据是真实数据）\n",
    "    D.train(G.forward(torch.FloatTensor([0.5])).detach(), torch.FloatTensor([0.0]))#根据生成器生成的数据，和目标数据0训练鉴别器（目标数据0代表假，即当前训练的输入鉴别器的数据为假数据（生成器生成的数据））\n",
    "    G.train(D, torch.FloatTensor([0.5]), torch.FloatTensor([1.0]))#根据鉴别器鉴别生成器所生成数据的结果和目标数据1来训练生成器，尽可能让生成器生成的数据的鉴别结果趋近于真实数据的鉴别结果（也就是鉴别器输出结果为1）  \n",
    "    if(i % 1000 == 0):\n",
    "        image_list.append(G.forward(torch.FloatTensor([0.5])).detach().numpy())\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "9cc5ec94",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "D.plot_progress()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "1247ad0a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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CQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAioAAACdIKACAADQCQIqAAAAnSCgAgAA0AkCKgAAAJ0goAIAANAJAup12h1PszWeZTSZHfepAAAA3FME1OswmszypRcv5szFmude2xJSAQAAbiEB9TqMp7O0vZJBL5nNasZTARUAAOBWEVCvQ7/XpG1KdiY141lNv+fpAwAAuFWOlLBKKd9VSvlSKeXLpZQfvsL9HyilnC+lfH7x7y8d9di7yaBt8s77V7PW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",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "G.plot_progress()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "63ce5061",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.8881, 0.0736, 0.9207, 0.0989])"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G.forward(torch.FloatTensor([0.5])).detach()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "bda906cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1341359e550>"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (16,8))\n",
    "plt.imshow(numpy.array(image_list).T, interpolation='none', cmap='Blues')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7c08e956",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
